package com.kjc.demo.rcservice.app;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import com.alibaba.fastjson.TypeReference;
import com.kjc.demo.rcservice.bean.DocDiskBean;
import com.kjc.demo.rcservice.dto.DocDiskDTO;
import com.kjc.demo.rcservice.dto.req.DocDiskReqDTO;
import com.kjc.demo.rcservice.dto.res.DocDiskResDTO;
import com.kjc.demo.rcservice.service.DocDiskService;
import com.sdhs.paas.sdk.base.common.BasePage;
import com.sdhs.paas.sdk.base.common.entity.PaginationEntity;
import com.sdhs.paas.sdk.base.dto.PageInfoDTO;
import com.sdhs.paas.sdk.base.utils.EntityDtoConvertUtil;
import com.sdhs.paas.sdk.core.PaasBaseException;
import com.sdhs.paas.sdk.core.PaasBaseRequest;
import com.sdhs.paas.sdk.core.PaasBaseResponse;
import com.sdhs.paas.sdk.core.RefreshableRestController;

/**
 * @author DocDisk
 * @version 1.0
 * @Title:  代码生成接口，用于接受前端传输过来的数据
 * @author kangjichang
 * @date 2018-12-06
 */
 
@RefreshableRestController
@RequestMapping(value = "/docDisk")
public class DocDiskController {

    @Autowired
    private DocDiskService docDiskService;
    
    /**
     * 分页查询接口
     * */
    @PostMapping("/getDocDiskPageList")
	public PaasBaseResponse<DocDiskResDTO> getDocDiskPageList(@RequestBody PaasBaseRequest<DocDiskReqDTO> docDiskReqDTO) {
    	DocDiskDTO docDiskDTO = docDiskReqDTO.getBody().getDocDiskDTO();
    	PageInfoDTO pageInfoDTO = docDiskReqDTO.getBody().getPageInfo();
    	
		BasePage pageRequest = new BasePage();
		pageRequest.setPage(pageInfoDTO.getPage());
		pageRequest.setCount(pageInfoDTO.getPageSize());
		
		DocDiskBean docDiskBean = EntityDtoConvertUtil.convertToEntity(docDiskDTO, DocDiskBean.class);
		PaginationEntity<DocDiskBean> page = docDiskService.getPageDocDiskList(pageRequest, docDiskBean);
    	PageInfoDTO resPageInfoDTO = new PageInfoDTO();
    	DocDiskResDTO docDiskResDTO = new DocDiskResDTO();
		resPageInfoDTO.setRowCount(page.getTotal());
		docDiskResDTO.setPageInfo(resPageInfoDTO);
		List<DocDiskBean> docDiskBeanList = page.getRows();
		List<DocDiskDTO> dtoList = new ArrayList<DocDiskDTO>();
		dtoList = EntityDtoConvertUtil.convertToDTOList(docDiskBeanList, new TypeReference<List<DocDiskDTO>>() {
		});
		docDiskResDTO.setDocDiskDTOList(dtoList);
    	return new PaasBaseResponse<>(docDiskResDTO);
	}
	
	/**
	 * 保存接口
	 * */
	@PostMapping("/saveDocDisk")
	public PaasBaseResponse<DocDiskResDTO> saveDocDisk(@RequestBody PaasBaseRequest<DocDiskReqDTO> docDiskReqDTO) {
		DocDiskDTO docDiskDto = docDiskReqDTO.getBody().getDocDiskDTO();
		DocDiskBean docDiskBean = EntityDtoConvertUtil.convertToEntity(docDiskDto, DocDiskBean.class);
		String userId = docDiskBean.getUserId();
		DocDiskBean param = new DocDiskBean();
		param.setUserId(userId);
		Integer count = docDiskService.getListCount(param);
		if(count >= 1){
			throw new PaasBaseException("000001","该用户已经创建过网盘，每个用户只能创建一个网盘！！！");
		}
		String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
		docDiskBean.setId(uuid);
		docDiskBean.setIsDeleted(0);
		Boolean flag = docDiskService.saveDocDisk(docDiskBean);
		docDiskDto.setId(uuid);
		DocDiskResDTO docDiskResDTO = new DocDiskResDTO();
		docDiskResDTO.setDocDiskDTO(docDiskDto);
		return new PaasBaseResponse<>(docDiskResDTO);
	}
	
	/**
	 * 修改接口
	 * */
	@PostMapping("/updateDocDisk")
	public PaasBaseResponse<DocDiskResDTO> updateDocDisk(@RequestBody PaasBaseRequest<DocDiskReqDTO> docDiskReqDTO) {
		DocDiskDTO docDiskDto = docDiskReqDTO.getBody().getDocDiskDTO();
		DocDiskBean docDiskBean = EntityDtoConvertUtil.convertToEntity(docDiskDto, DocDiskBean.class);
		Boolean flag = docDiskService.updateDocDisk(docDiskBean);
		DocDiskResDTO docDiskResDTO = new DocDiskResDTO();
		docDiskResDTO.setDocDiskDTO(docDiskDto);
		return new PaasBaseResponse<>(docDiskResDTO);
	}
	
	/**
	 * 获取详情接口
	 * */
	@PostMapping("/getDocDiskDetail")
	public PaasBaseResponse<DocDiskResDTO> getDocDiskDetail(@RequestBody PaasBaseRequest<DocDiskReqDTO> docDiskReqDTO) {
		DocDiskDTO docDiskDto = docDiskReqDTO.getBody().getDocDiskDTO();
		DocDiskBean docDiskBean = EntityDtoConvertUtil.convertToEntity(docDiskDto, DocDiskBean.class);
		docDiskBean = docDiskService.getDocDiskDetail(docDiskBean.getId());
		DocDiskResDTO docDiskResDTO = new DocDiskResDTO();
		docDiskResDTO.setDocDiskDTO(docDiskDto);
		return new PaasBaseResponse<>(docDiskResDTO);
	}
	
	/**
	 * 删除接口
	 * */
	@PostMapping("/deleteDocDisk")
	public PaasBaseResponse<DocDiskResDTO> deleteDocDisk(@RequestBody PaasBaseRequest<DocDiskReqDTO> docDiskReqDTO) {
		DocDiskDTO docDiskDto = docDiskReqDTO.getBody().getDocDiskDTO();
		DocDiskBean docDiskBean = EntityDtoConvertUtil.convertToEntity(docDiskDto, DocDiskBean.class);
		Boolean flag = docDiskService.deleteDocDisk(docDiskBean);
		DocDiskResDTO docDiskResDTO = new DocDiskResDTO();
		docDiskResDTO.setDocDiskDTO(docDiskDto);
		return new PaasBaseResponse<>(docDiskResDTO);
	}
}
